/**
 * 系统所有的角色
 * <p>
 * 角色列表到处写, 改起来非常麻烦, 抽出来写在单独的文件里.
 * <p>
 * id: 角色ID
 * name: 角色名称
 * <p>
 * 角色ID分配:
 * 1: 超级理员
 * 0: 总管理员
 * 10~99: 顾客的PC端账号
 * 100~199: 公司的管理端账号
 * 200~299: 顾客的手机端账号
 */
export const systemRoles = [
  { id: 1, name: '超级理员' },
  { id: 0, name: '总管理员' },
  { id: 14, name: '一级门店' },
  { id: 15, name: '二级门店（院长）' },
  { id: 16, name: '二级门店（普通）' },
  { id: 101, name: '教练' },
  { id: 102, name: '总教练' },
  { id: 180, name: '销售' },
  { id: 201, name: '门店-老板' },
  { id: 202, name: '门店-院长' },
  { id: 213, name: '门店-管家（院长）' },
  { id: 203, name: '门店-管家（普通）' },
  { id: 204, name: '门店-前台' },
  { id: 205, name: '门店-财务' },
  { id: 206, name: '操作师-医生' },
  { id: 207, name: '操作师-护士' },
  { id: 208, name: '操作师-美容师' },
];

const needRegionRoles = [14, 102, 180];
const needSalonRoles = [15, 16, 101, 180];

Object.freeze(systemRoles);

/**
 * 根据角色id, 获取对应的角色名称. id 不存在则返回 undefined.
 * @param {number} id 角色ID
 * @return {string | undefined} 角色名称
 */
export function getRoleName(id) {
  const tmp = systemRoles.find(x => x.id === id);
  if (tmp === undefined) {
    return undefined;
  }
  return tmp.name;
}

/**
 * 判断角色是否为超级管理员
 *
 * @param {number} id 角色ID
 * @return {boolean}
 */
export function isSuperAdminRole(id) {
  return id !== undefined && id == 1;
}

/**
 * 判断菜单是否为业务级超级管理员可见菜单
 *
 * @param {number} roles 菜单上绑定的角色
 * @return {boolean}
 */
export function isSuperBuziMenu(roles) {
  return roles && roles.length === 1 && roles[0] == 1;
}

/**
 * 判断角色是否为业务级超级管理员
 *
 * @param {number} roles 角色ID
 * @return {boolean}
 */
export function hasSuperBuziRole(roles) {
  return roles && roles.length && roles.some(x => x == 1);
}

/**
 * 判断角色是否为管理员
 *
 * @param {number} id 角色ID
 * @return {boolean}
 */
export function isAdminRole(id) {
  return id !== undefined && (id == 0 || id == 1);
}

/**
 * 判断角色是否为教练
 *
 * @param {number} id 角色ID
 * @return {boolean}
 */
export function isCoachRole(id) {
  return id !== undefined && (id == 101 || id == 102);
}

/**
 * 角色是否需要选择区域
 * @param {number} id 角色ID
 * @return  {boolean}
 */
export function isRoleNeedRegion(id) {
  return id !== undefined && needRegionRoles.includes(id);
}

/**
 * 角色是否需要选择门店
 * @param {number} id 角色ID
 * @return  {boolean}
 */
export function isRoleNeedSalon(id) {
  return id !== undefined && (id >= 200 || needSalonRoles.includes(id));
}
